home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1994 October / Macformat17.cdr / Shareware City / Developers / shutdown-fx-20-c / sfx init ƒ / code ƒ / really notify.c < prev    next >
Text File  |  1994-07-11  |  3KB  |  127 lines

  1. /**********************************************************************\
  2.  
  3. File:        really notify.c
  4.  
  5. Purpose:    This module handles notifying the user that an error has
  6.             occurred (through the Notification Manager); also, displaying
  7.             the proper icon during init loading.
  8.             
  9. This program is free software; you can redistribute it and/or modify
  10. it under the terms of the GNU General Public License as published by
  11. the Free Software Foundation; either version 2 of the License, or
  12. (at your option) any later version.
  13.  
  14. This program is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. GNU General Public License for more details.
  18.  
  19. You should have received a copy of the GNU General Public License
  20. along with this program in a file named "GNU General Public License".
  21. If not, write to the Free Software Foundation, 675 Mass Ave,
  22. Cambridge, MA 02139, USA.
  23.  
  24. \**********************************************************************/
  25.  
  26. #include "really notify.h"
  27. #include "environment.h"
  28. #include "show init.h"
  29. #include "GestaltEQU.h"
  30.  
  31. #define        GOOD_ICON            129
  32. #define        BAD_ICON            130
  33. #define        DEFAULT_MESSAGE        "\pShutdown FX did not load because \
  34. an error occurred during startup.  The INIT may be damaged, \
  35. or there may not be enough memory in the system heap."
  36.  
  37. void StartupError(short errorcode)
  38. {
  39.     Str255            errorText;
  40.     Str255            errorNumber;
  41.     unsigned char    *defaultText = DEFAULT_MESSAGE;
  42.     unsigned char    *textPtr;
  43.     StringPtr        str;
  44.     short            size;
  45.     Boolean            gHasNotification;
  46.     OSErr            isHuman;
  47.     unsigned long    gestalt_temp;
  48.     
  49.     isHuman = Gestalt(gestaltNotificationMgrAttr, &gestalt_temp);
  50.     gHasNotification=((!isHuman) &&
  51.         (((gestalt_temp >> gestaltNotificationPresent) & 0x01) == 1));
  52.     if (gHasNotification)
  53.     {
  54.         SetZone(ApplZone);
  55.         GetIndString(errorText, 129, errorcode);
  56.         SetZone(SysZone);
  57.         textPtr=(errorText[0]==0) ? defaultText : errorText;        
  58.         size = textPtr[0] + 1;
  59.         str = (StringPtr)NewPtrSys(size);
  60.         if(str)
  61.         {
  62.             BlockMove(textPtr, str, size);
  63.             
  64.             if(SetupNM(str))
  65.                 DisposePtr(str);
  66.         }
  67.     }
  68.     
  69.     ShowIconFamily(BAD_ICON);
  70. }
  71.  
  72. void StartupGood(void)
  73. {
  74.     ShowIconFamily(GOOD_ICON);
  75. }
  76.  
  77. short SetupNM(StringPtr str)
  78. {
  79.     NMRec            *note;
  80.     Handle            nmResponse;
  81.     OSErr            isHuman;
  82.     long            gestaltReturn;
  83.     
  84.     if(str == (StringPtr)0L)
  85.         return 1;
  86.     
  87.     note = (NMRec*)NewPtrSys(sizeof(NMRec));
  88.     if(!note)
  89.     {
  90.         return 1;
  91.     }
  92.     else
  93.     {
  94.         note->qType = nmType;
  95.         note->nmMark = 0;
  96.         note->nmIcon = 0L;
  97.         note->nmSound = 0L;
  98.         note->nmStr = str;
  99.         
  100.         /* NMRP ID=RESPONSE_NMRP must be System Heap, Preload */
  101.         nmResponse = GetResource('NMRP', RESPONSE_NMRP);
  102.         if(!nmResponse)
  103.         {
  104.             DisposePtr(note);
  105.             return 1;
  106.         }
  107.         else
  108.         {
  109.             HLock(nmResponse);
  110.             HNoPurge(nmResponse);
  111.             DetachResource(nmResponse);
  112.             
  113.             note->nmResp = (ProcPtr)*nmResponse;
  114.             
  115.             if(NMInstall(note) == noErr)
  116.             {
  117.                 return 0;
  118.             }
  119.             else
  120.             {
  121.                 DisposePtr(note);
  122.                 return 1;
  123.             }
  124.         }
  125.     }
  126. }
  127.